# cmake_minimum_required(VERSION 3.10)
# project(NetworkModule)

# # 设置模块特有输出目录 (可选，如果父项目统一管理输出，可以移除)
# set(MODULE_OUTPUT_DIR ${PROJECT_SOURCE_DIR}/module_out_exe)

# # 1. 获取网络模块的源文件
# file(GLOB NETWORK_CPP_FILES
#     "*.cpp"
#     "net/*.cpp"
#     "base/*.cpp"
# )
# file(GLOB NETWORK_H_FILES
#     "*.h"
#     "net/*.h"
#     "base/*.h"
# )

# set(SRC_FILES
#     ${NETWORK_CPP_FILES}
#     ${NETWORK_H_FILES}
# )

# # 2. 定义核心静态库
# add_library(network_module STATIC ${SRC_FILES})

# # 3. 设置头文件包含路径
# target_include_directories(network_module PUBLIC
#     ${CMAKE_CURRENT_SOURCE_DIR} # 包含当前目录（即network）的头文件
#     ${CMAKE_CURRENT_SOURCE_DIR}/net # 包含net子目录的头文件
#     ${CMAKE_CURRENT_SOURCE_DIR}/base # 包含base子目录的头文件
#     ${PROJECT_SOURCE_DIR}/src # 包含src目录，以便可以包含"base/LogStream.h"这样的文件
# )

# # 4. 配置父项目集成接口
# install(TARGETS network_module
#     ARCHIVE DESTINATION lib
#     LIBRARY DESTINATION lib
#     RUNTIME DESTINATION bin
#     INCLUDES DESTINATION include
# )

# install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/ DESTINATION include/network
#     FILES_MATCHING PATTERN "*.h"
# )

# # 5. 模块输出设置（可选，如果父项目统一管理输出，可以移除）
# set_target_properties(network_module PROPERTIES
#     ARCHIVE_OUTPUT_DIRECTORY ${MODULE_OUTPUT_DIR}/lib
#     LIBRARY_OUTPUT_DIRECTORY ${MODULE_OUTPUT_DIR}/lib
#     RUNTIME_OUTPUT_DIRECTORY ${MODULE_OUTPUT_DIR}/bin
# ) 


cmake_minimum_required(VERSION 3.10)
project(my_library_network LANGUAGES CXX)

# 设置C++标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 1. 获取网络模块的源文件
file(GLOB NETWORK_CPP_FILES
    "*.cpp"
    "net/*.cpp"
    "base/*.cpp"
)
file(GLOB NETWORK_H_FILES
    "*.h"
    "net/*.h"
    "base/*.h"
)

# 2. 引入BaseModule子项目
add_subdirectory(
    ../base
    ${CMAKE_CURRENT_BINARY_DIR}/base_build  # 显式指定构建输出目录
)  # 路径需匹配实际位置


# 定义库目标，指定源文件（相对路径基于 CMakeLists.txt 所在目录）
#明确指定构建共享库（SHARED），生成 .so 文件
add_library(my_library_network  SHARED
    ${NETWORK_CPP_FILES}
)

# 4. 链接BaseModule并传递依赖
target_link_libraries(my_library_network PUBLIC BaseModule)

# 导出公共头文件路径（供外部项目使用）
target_include_directories(my_library_network PUBLIC 
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>   # 当前目录
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/net>  # net子目录
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/base> # base子目录
)

# 6. 确保依赖传递到父项目
set_target_properties(my_library_network PROPERTIES
    INTERFACE_LINK_LIBRARIES "BaseModule"
)
